import org.testng.annotations.Test;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class StreamDemo {
    public static void main(String[] args) {
        test4();
    }

    public static void test1() {
        List<String> names = new ArrayList<>();
        names.add("张三");
        names.add("张三1");
        names.add("张三2");
        names.add("张三3");
        names.add("张三4");
        names.add("张三5");
        names.add("张三6");
        names.add("张三7");
        names.add("张三8");
        List<String> list1 = new ArrayList<>();
        //遍历name集合
        names.forEach(name -> {
            if (name.startsWith("张三")) {
                //添加到list1集合中
                list1.add(name);
            }
        });
        List<String> list2 = new ArrayList<>();
        //遍历name集合
        names.forEach(name -> {
            if (name.startsWith("张三")) {
                //添加到list1集合中
                list2.add(name);
            }
        });
        list2.forEach(name -> System.out.println(name));

        System.out.println("----------------------------");

        //1.获取集合的流对象Stream
        //2.筛选，获取符合条件的元素
        //3.终结方法
        names.stream()
                .filter(s -> s.startsWith("张"))
                .filter(s -> s.length() == 3)
                .forEach(System.out::println);
    }
    @Test
    public static void test2() {
        List<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        list.add(5);
        list.add(6);
        list.add(7);
        list.add(8);
        list.add(9);
        list.add(10);

        //最后调用收集方法
        List<Integer> list1 = list.stream()
                .filter(integer -> integer % 2 == 0)
                .toList();
        System.out.println(list1);
    }
    public static void test3() {
        List<String> list = new ArrayList<>();
        list.add("张三,23");
        list.add("李四,24");
        list.add("王五,25");
        //过滤年龄大于23的
        Map<Object, Object> map = list.stream().filter(s -> {
            //将s切分开
            String[] split = s.split(",");
            int age = Integer.parseInt(split[1]);
            return age > 23;
        }).collect(Collectors.toMap(s -> {
            String[] split = s.split(",");
            return split[0];
        }, s -> {
            String[] split = s.split(",");
            return split[1];
        }));
        //遍历集合
        map.forEach((k,v)->{
            System.out.println(k+" "+v);
        });
    }
    public static void test4() {
        List<String> list1 = new ArrayList<>();
        list1.add("张三");
        list1.add("李四二");
        list1.add("王五");
        list1.add("赵六");
        list1.add("张三丰");
        list1.add("张三");
        List<String> list2 = new ArrayList<>();
        //女演员
        list2.add("赵丽颖");
        list2.add("高圆圆");
        list2.add("林志玲");
        list2.add("杨幂");
        list2.add("古力娜扎");
        list2.add("杨二");

        Stream<String> stream1 = list1.stream().filter(new Predicate<String>() {
            @Override
            public boolean test(String s) {
                return s.length() == 3;
            }
        }).limit(2);
        Stream<String> stream2 = list2.stream().filter(new Predicate<String>() {
            @Override
            public boolean test(String s) {
                return s.startsWith("杨");
            }
        }).skip(1);
        Stream.concat(stream1,stream2).forEach(System.out::println);

    }
}
